﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using DataAccess;

namespace BusinessLogic
{
    public class Mensaje
    {
        #region ATRIBUTOS

        long _Id;
        DateTime _Fecha;
        string _Texto;

        #endregion

        #region PROPERTIES

        public long Id
        {
            get { return _Id; }
            set { _Id = value; }
        }

        public DateTime Fecha
        {
            get { return _Fecha; }
            set { _Fecha = value; }
        }

        public string Texto
        {
            get { return _Texto; }
            set { _Texto = value; }
        }

        #endregion

        #region CONSTRUCTORES

        public Mensaje() { }

        public Mensaje(long pId, DateTime pFecha, string pTexto)
        {
            _Id = pId;
            _Fecha = pFecha;
            _Texto = pTexto;
        }

        public Mensaje(DateTime pFecha, string pTexto)
        {
            _Fecha = pFecha;
            _Texto = pTexto;
        }

        #endregion

        #region METODOS
        //Insertar un nuevo mensaje.
        public void insertMensaje(long pNroSol)
        {
            ControllerMensaje.getInstancia().insertMensaje(this.Texto, (Int32)pNroSol);
        }

        //Actualizar un mensaje existente.
        public void updateMensaje()
        {
            ControllerMensaje.getInstancia().updateMensaje(this.Texto, (Int32)this.Id);
        }

        //Dar lista de mensajes por numero de solicitud.
        public static List<Mensaje> getMensajesByNroSolicitud(long pSol)
        {
            //Se obtiene un datatable con la lista de comentarios correspondiente al numero de solicitud
            DataTable dt = ControllerMensaje.getInstancia().getListMensajesBySol((Int32)pSol);
            //Se parsea la datatable a una lista de tipo Mensaje.
            return (ParseToMensaje(dt)).Count() != 0 ? ParseToMensaje(dt) : null;
        }

        //Parsear una datatable a una lista de mensajes.
        public static List<Mensaje> ParseToMensaje(DataTable pDt)
        {
            //Recibe como parametro una data table con los registros correspondientes a uno o mas
            //mensajes y devuelve una lista de objetos "Mensaje".
            List<Mensaje> lstMen = new List<Mensaje>();

            //Se recorre la tabla.
            for (int i = 0; i < pDt.Rows.Count; i++)
            {
                //Se crea una nueva instancia de la clase Persona.
                Mensaje unMen = new Mensaje();
                unMen.Id = long.Parse(pDt.Rows[i]["Id"].ToString());
                unMen.Texto = pDt.Rows[i]["Texto"].ToString();
                unMen.Fecha = DateTime.Parse(pDt.Rows[i]["Fecha"].ToString());
                
                //Se agrega el mensaje a la lista.
                lstMen.Add(unMen);
            }
            return lstMen;
        }
        #endregion
    }
}
